-
Notifications
You must be signed in to change notification settings - Fork 172
Add Linux Steam and Proton support #19381
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Add Linux Steam path discovery (findLinuxSteamPath) - Add Proton detection and environment setup utilities - Force Steam launcher for Linux Steam games - Enable running Windows tools through Proton
- Run games and tools through Proton directly instead of via `steam -applaunch` This allows passing custom command-line arguments and running different executables (like mod tools) with the game's Proton prefix - Tools now inherit store from game discovery, enabling Proton execution - Skip spinner on Linux Proton launches (ProcessMonitor only works on Windows) - Only attempt elevated execution on Windows (fixes ShellExecuteEx error on Linux) - Remove dead code: shouldUseSteamLauncherOnLinux function - Fix re-reselect imports (use default import instead of named)
|
Are we sure we want to internalize the ability to launch proton directly? In the app we decided against internalizing and instead using |
Protontricks is also more likely to closely follow Proton developments that might otherwise break an internalized feature. |
|
Fine by me. Same comment as the two above; but not a big deal for now. Looking at this reminds me that last I tried, building a static protontricks was a PITA, nevermind the manual maintenance of version updates afterwards. As far as things go longer term. Supporting other stores may require the likes of umu; but that's not set in stone. e.g. If we go the route of instead supporting Heroic again for GoG, they'd be doing that for us on their end. We just invoke via Heroic as usual, like with NMA. |
|
I built the linux-steam-finder branch on ultramarine linux. (fontconfig-devel needed to be installed manually). I successfully launched Fallout 4 through steam/proton (native steam package, not flatpak) from Vortex's play button. I have a 20 second video if it's acceptable to attach it here. Vortex detected Fallout 4's game path just fine, however related paths are checking for things like Fallout4.ini and Fallout4Prefs.ini in "home/{username}/Documents/..." instead of the game's respective wine prefix. For reference, in my case fallout 4's prefix would be in "/home/xela/.steam/steam/steamapps/compatdata/377160/pfx/". I'm not sure if " Verify Steam path detection" is just referring to the game folder itself or if this is included, but I thought I'd mention it. |
Co-authored-by: erri120 <erri120@fossmailer.de>
Co-authored-by: erri120 <erri120@fossmailer.de>
Co-authored-by: erri120 <erri120@fossmailer.de>
Co-authored-by: erri120 <erri120@fossmailer.de>
Whatever we do, I'd rather not have additional setup steps for users. Is protontricks installed by default on SteamOS? If not can't we just launch games using whatever method Steam uses? I'd like to avoid having to mod the mod manager in order to have things work for users. Or perhaps we can have protontricks included in flatpack (maybe that's crazy talk) or installed as a prerequisite for the Vortex flatpack? Whatever we do, I really just want a download the app and it works out-of-the-box. |
No.
The Steam browser protocol allows you to launch games through Steam but it doesn't allow you to run arbitrary commands.
Flatpaks can't depend on another flatpak by design. App-to-app dependency chains are deliberately avoided because that'd break the sandbox. The common approaches to this are
|
|
I'm happy that we just internalize it and get this PR wrapped up. Seweryn is going to be working on Flatpak next week. |
|
Hey, so for what it's worth a lot of the protontricks can be fully replaced with winetricks and just using the GitHub binary raw file. It's late so I pulled this directly from Claude as an example of the things that I do to ensure mo2 integration with steam. I know its written in rust, but you should be able to get the idea if you want to even take a look at it in the first place. NaK I just thought I'd drop by with some ideas. A lot of the winedlloverrides can be written to a registry file and applied via proton itself removing the need for launch options. If I had the chance to support or request a feature, my only request would be having an option to chose your own location for a prefix. Because I'd love to support the Linux port of vortex but it wouldn't really be possible if I can't get a dedicated prefix for it. (And yes spooky sloppy ai for my personal projects lol) Edit: And for linux game detection, any reason why you couldn't just rewrite support for GameFinder to be incorperated into vortex? |
|
There are some glaring omissions in the implementation.
More documentation: |
I was just giving some information as a lot of this can easily be modified/handled. And as for the SLR I have found no issues not using for prefix creation, with users using flatpak or native steam. At least in my testing on NaK. Again I was just giving my thoughts and opinions, as the winetricks method is something Omni uses in Jackify as well. |
|
@SulfurNitride I believe you quoted my comment by mistake. I am referring to the general implementation of this PR, not to your suggestion. As for not using the SLR, well, it is being used for a reason by Steam, no matter how many issues you encounter or not, you cannot be certain that it will work for everyone. |
Co-authored-by: erri120 <erri120@fossmailer.de>
Summary
symlinks)
Details
Linux Steam Discovery (
src/util/linux/steamPaths.ts)Steam on Linux can be installed in various locations depending on the distribution and installation method. This
adds detection for native installs (
~/.local/share/Steam), Flatpak, Snap, and legacy paths.Proton Detection (
src/util/linux/proton.ts)For games using Proton, we need to find the configured Proton version to run tools. Steam stores config names
(e.g.,
proton_experimental) inconfig.vdf, but actual folder names differ (e.g.,Proton - Experimental).Since Steam provides no mapping, we use filesystem scanning with fuzzy matching—no hardcoded version map that
would need maintenance.
Game Launching (
src/util/StarterInfo.ts)Linux Steam games now automatically use the Steam launcher, which handles Proton configuration. This avoids
Vortex needing to replicate Steam's Proton launch logic.
Tool Execution (
src/util/Steam.ts)Windows tools (.exe) associated with Steam games can now run through Proton using the game's existing Wine
prefix, allowing mod tools to work on Linux.
Known Issues
but does not yet detect SKSE or know where to write settings.I debugged this, we now run proton directly with settings from Steam meaning SKSE works fineTest plan